package com.protocolterminal.base;

public class Control {

	private int DIR;
	private int PRM;
	private int FCB;
	private int FCV;
	private int FunctionCode;

	public int getDIR() {
		return DIR;
	}

	public void setDIR(int dIR) {
		DIR = dIR;
	}

	public int getPRM() {
		return PRM;
	}

	public void setPRM(int pRM) {
		PRM = pRM;
	}

	public int getFCB() {
		return FCB;
	}

	public void setFCB(int fCB) {
		FCB = fCB;
	}

	public int getFCV() {
		return FCV;
	}

	public void setFCV(int fCV) {
		FCV = fCV;
	}

	public int getFunctionCode() {
		return FunctionCode;
	}

	public void setFunctionCode(int functionCode) {
		FunctionCode = functionCode;
	}

	/**
	 * @Title: FrameControl.java
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param DIR
	 *            DIR=0，表示此帧报文是由主站发出的下行报文； DIR=1，表示此帧报文是由终端发出的上行报文。</br>
	 * @param PRM
	 *            PRM=1，表示此帧报文来自启动站；PRM=0，表示此帧报文来自从动站</br>
	 * @param FCB
	 *            0
	 * @param FCV
	 *            0
	 * @param FunctionCode
	 *            <i>PRM=1</i></br>
	 *            1 发送∕确认 复位命令 </br>
	 *            4 发送∕无回答 用户数据 </br>
	 *            9 请求∕响应帧 链路测试 </br>
	 *            10 请求∕响应帧 请求1级数据 </br>
	 *            11 请求∕响应帧 请求2级数据</br>
	 *            <i>PRM=0</i></br>
	 *            0 确认 认可 </br>
	 *            8 响应帧 用户数据 </br>
	 *            9 响应帧 否认：无所召唤的数据 </br>
	 *            11 响应帧 链路状态</br>
	 */
	public Control(int DIR, int PRM, int FCB, int FCV, int FunctionCode) {
		this.DIR = DIR;
		this.PRM = PRM;
		this.FCB = FCB;
		this.FCV = FCV;
		this.FunctionCode = FunctionCode;
	}

	public Control(String control) {
		this.DIR = (Integer.valueOf(control, 16) & 0x80) >> 7;
		this.PRM = (Integer.valueOf(control, 16) & 0x40) >> 6;
		this.FCB = (Integer.valueOf(control, 16) & 0x20) >> 5;
		this.FCV = (Integer.valueOf(control, 16) & 0x10) >> 4;
		this.FunctionCode = Integer.valueOf(control, 16) & 0x0F;
	}

	@Override
	public String toString() {
		int DIR = (this.DIR << 7) & 0x80;
		int PRM = (this.PRM << 6) & 0x40;
		int FCB = (this.FCB << 5) & 0x20;
		int FCV = (this.FCV << 4) & 0x10;
		return Integer.toHexString((DIR | PRM | FCB | FCV | FunctionCode) | 0x100).substring(1, 3);
	}

}
